/**
 * 错误处理中间件
 * 用于统一处理API请求中的错误
 */

// 捕获404错误
const notFound = (req, res, next) => {
  res.status(404).json({
    message: `未找到资源 - ${req.originalUrl}`,
    code: 404
  });
};

// 全局错误处理
const errorHandler = (err, req, res, next) => {
  // 确定状态码
  const statusCode = res.statusCode === 200 ? 500 : res.statusCode;
  
  // 设置响应状态
  res.status(statusCode);
  
  // 构建错误响应
  const response = {
    message: err.message,
    code: statusCode,
    stack: process.env.NODE_ENV === 'production' ? null : err.stack
  };
  
  // 处理Sequelize验证错误
  if (err.name === 'SequelizeValidationError' || err.name === 'SequelizeUniqueConstraintError') {
    return res.status(400).json({
      message: '数据验证错误',
      code: 400,
      errors: err.errors.map(e => ({
        field: e.path,
        message: e.message
      }))
    });
  }
  
  // 处理JWT错误
  if (err.name === 'JsonWebTokenError') {
    return res.status(401).json({
      message: '无效的令牌',
      code: 401
    });
  }
  
  if (err.name === 'TokenExpiredError') {
    return res.status(401).json({
      message: '令牌已过期',
      code: 401
    });
  }
  
  // 返回JSON响应
  res.json(response);
};

module.exports = {
  notFound,
  errorHandler
};